  /**
   * {{description}}{{^description}}Gets or Sets {{{name}}}{{/description}}
   */
{{#isDeprecated}}
  @Deprecated
{{/isDeprecated}}
{{#jsonb}}
  @JsonbTypeSerializer({{datatypeWithEnum}}.Serializer.class)
  @JsonbTypeDeserializer({{datatypeWithEnum}}.Deserializer.class)
{{/jsonb}}
{{#withXml}}
  @XmlType(name="{{datatypeWithEnum}}")
  @XmlEnum({{dataType}}.class)
{{/withXml}}
  {{>additionalEnumTypeAnnotations}}public enum {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}} {
    {{#allowableValues}}
      {{#enumVars}}
    {{#enumDescription}}
    /**
     * {{.}}
     */
    {{/enumDescription}}
    {{#withXml}}
    @XmlEnumValue({{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}}{{{value}}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isLong}}"{{/isLong}}{{#isFloat}}"{{/isFloat}})
    {{/withXml}}
    {{{name}}}({{{value}}}){{^-last}},
    {{/-last}}{{#-last}};{{/-last}}
      {{/enumVars}}
    {{/allowableValues}}

    private {{{dataType}}} value;

    {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}({{{dataType}}} value) {
      this.value = value;
    }

    {{#jackson}}@JsonValue{{/jackson}}
    public {{{dataType}}} getValue() {
      return value;
    }

    @Override
    public String toString() {
      return String.valueOf(value);
    }

    {{#jackson}}@JsonCreator{{/jackson}}
    public static {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} fromValue({{{dataType}}} value) {
      for ({{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) {
        if (b.value.equals(value)) {
          return b;
        }
      }
      {{#isNullable}}return null;{{/isNullable}}{{^isNullable}}throw new IllegalArgumentException("Unexpected value '" + value + "'");{{/isNullable}}
    }
{{#jsonb}}
    public static final class Deserializer implements JsonbDeserializer<{{datatypeWithEnum}}> {
      @Override
      public {{datatypeWithEnum}} deserialize(JsonParser parser, DeserializationContext ctx, Type rtType) {
        for ({{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}} b : {{{datatypeWithEnum}}}{{^datatypeWithEnum}}{{{classname}}}{{/datatypeWithEnum}}.values()) {
          if (String.valueOf(b.value).equals(parser.getString())) {
            return b;
          }
        }
        {{#useNullForUnknownEnumValue}}return null;{{/useNullForUnknownEnumValue}}{{^useNullForUnknownEnumValue}}throw new IllegalArgumentException("Unexpected value '" + parser.getString() + "'");{{/useNullForUnknownEnumValue}}
      }
    }

    public static final class Serializer implements JsonbSerializer<{{datatypeWithEnum}}> {
      @Override
      public void serialize({{datatypeWithEnum}} obj, JsonGenerator generator, SerializationContext ctx) {
        generator.write(obj.value);
      }
    }
{{/jsonb}}
  }
